/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package alggen;

import java.awt.Canvas;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Point;

/**
 *
 * @author Macias
 */
public class MyCanvas extends Canvas{
   public Image obrazek;
   public Osobnik osobnik;
   public Osobnik [] osobniki;
   public Point startPoz = new Point(0,0);
   public Point endPoz = new Point(255,255);

   
    public void paint(Graphics g2){

            Image buffer = this.createImage(this.getWidth(), this.getHeight());
            Graphics g = buffer.getGraphics();

           if(obrazek!=null){
               g.drawImage(obrazek, 0, 0, this.getWidth(), this.getHeight(), null);
               if(startPoz!= null && endPoz!=null){
                    //rysowanie poz star i konc
                   g.setColor(Color.GREEN);
                   g.fillOval(startPoz.x*2-4, startPoz.y*2-4, 9, 9);

                   int xS = startPoz.x*2;
                   int yS = startPoz.y*2-5;
                   if(yS<15)yS+=20;
                   if(xS>460)xS-=50;
                   g.drawString("początek", xS, yS);

                    g.setColor(Color.MAGENTA);
                   g.fillOval(endPoz.x*2-4, endPoz.y*2-4, 9, 9);

                   xS = endPoz.x*2;
                   yS = endPoz.y*2-5;
                   if(yS<15)yS+=20;
                   if(xS>460)xS-=50;
                   g.drawString("koniec", xS, yS);
                   }
               }
            
//           if(osobnik!=null && startPoz!= null && endPoz!=null){
//               g.setColor(Color.blue);
//
//               int i=0;
//               int j=0;
//
//               if(j<osobnik.sciezka.length){
//                   g.drawLine(startPoz.x*2, startPoz.y*2, osobnik.sciezka[j].x*2, osobnik.sciezka[j].y*2);
//                   for(i=j; j<osobnik.sciezka.length-1;j++){
//                      g.drawLine(osobnik.sciezka[i].x*2, osobnik.sciezka[i].y*2, osobnik.sciezka[j].x*2, osobnik.sciezka[j].y*2);
//                      i=j;
//
//                   }
//                   g.drawLine(endPoz.x*2, endPoz.y*2, osobnik.sciezka[i].x*2, osobnik.sciezka[i].y*2);
//                   }else
//                       g.drawLine(startPoz.x*2, startPoz.y*2, endPoz.x*2, endPoz.y*2);
//           }

           if(osobniki!=null && startPoz!= null && endPoz!=null){
               Color colorBest = null;
               for(int n = 0; n<osobniki.length; n++){
                   if(osobniki[n].sciezka == null)
                       continue;

                   if(!osobniki[n].alive)
                       continue;

                   if(osobniki[n] == osobnik){
                       colorBest = Color.getHSBColor((float)n/osobniki.length, 1.0f, 0.7f);
                       continue;
                   }
                   g.setColor(Color.getHSBColor((float)n/osobniki.length, 0.2f, 1.0f));

                   int i=0;
                   int j=0;

                   if(j<osobniki[n].sciezka.length){
                       g.drawLine(startPoz.x*2, startPoz.y*2, osobniki[n].sciezka[j].x*2, osobniki[n].sciezka[j].y*2);
                       for(i=j; j<osobniki[n].sciezka.length;j++){
                          g.drawLine(osobniki[n].sciezka[i].x*2, osobniki[n].sciezka[i].y*2, osobniki[n].sciezka[j].x*2, osobniki[n].sciezka[j].y*2);
                          i=j;

                       }
                       g.drawLine(endPoz.x*2, endPoz.y*2, osobniki[n].sciezka[i].x*2, osobniki[n].sciezka[i].y*2);
                       }else
                           g.drawLine(startPoz.x*2, startPoz.y*2, endPoz.x*2, endPoz.y*2);
               }

               g.setColor(colorBest);

               int j=0;
               int i=0;
               if(j<osobnik.sciezka.length){
                   g.drawLine(startPoz.x*2, startPoz.y*2, osobnik.sciezka[j].x*2, osobnik.sciezka[j].y*2);
                   for(i=j; j<osobnik.sciezka.length;j++){
                      g.drawLine(osobnik.sciezka[i].x*2, osobnik.sciezka[i].y*2, osobnik.sciezka[j].x*2, osobnik.sciezka[j].y*2);
                      i=j;

                   }
                   g.drawLine(endPoz.x*2, endPoz.y*2, osobnik.sciezka[i].x*2, osobnik.sciezka[i].y*2);
                   }else
                       g.drawLine(startPoz.x*2, startPoz.y*2, endPoz.x*2, endPoz.y*2);
           }

           g2.drawImage(buffer, 1, 1, null);
    }

    public void update(Graphics g){
        paint(g);
    }

}
